Most processing systems (e.g., computer or processor system) use high-speed, high bandwidth communication buses to transfer data, address and command information between components of the system. The components may include processors, memory subsystems and input/output devices.
A data bus, for example, is used to transmit data between two or more components and possibly to external devices. Data is typically transmitted as bytes or words (formed of multiple bytes) as opposed to individual bits. As such, the typical bus includes respective bus lines for each bit in the byte/word to be transferred. Each bus line has two possible states, one representing a first binary or logical value (e.g., “0”) and the other state representing a second binary/logical value (e.g., “1”).
Electronic switching noise occurs when a bus line switches from a first state to a second state (i.e., noise occurs when the bit on the bus transitions from a 1 to a 0 or a 0 to a 1). The amount of switching noise increases in an approximately linear fashion from an essentially non-zero noise condition (when no bits switch states) to a worst case switching noise condition (when all of the bits in a multi-bit word switch states at the same time). It is desirable to reduce the amount of switching noise on a bus that results from the transitioning of logical states of the data bits transmitted on the bus.
FIG. 1 is a block diagram illustrating a typical bussed system 10. The system includes a bus master 20 (e.g., a processor, microprocessor, application specific integrated circuit (ASIC)) and a bus slave 30 (e.g., memory circuit). The bus master 20 controls and communicates with the slave 30 over a control bus 40, address bus 50, data bus 60 and with clock signal lines 70. The system 10 may experience noise on any of the buses 40, 50, 60, 70.
Moreover, in some systems, driving a particular binary or logical value on a bit line will consume more power than when the other binary/logical value is driven on the bit line. For example, in some systems, driving a logical 0 on the bus line consumes more power than driving a 1 on the same bus line. Similarly, there are some systems in which driving a logical 1 on the bus line consumes more power than driving a 0 on the same bus line. It is desirable to reduce the energy consumed in a bussed system.
Bus inversion has been used to reduce noise and power consumption in a bussed system. Bus inversion compares existing bits on the bus (i.e., bits already transmitted, often referred to as “previous bits”) to bits to-be-transmitted (often referred to as the “preview bits” or “future bits”) to determine how many bit transitions from the previous bits will occur when the preview bits are transmitted. Bus inversion will invert all of the preview bits before transmitting them, if it is determined that inverting the bits would improve system performance (e.g., lower power consumption, produce less switching noise). Typically, an additional bit is used to indicate to a receiving device if the bits in the data word have been inverted or not. This bit is often referred to as the “inversion bit”. The receiving device inspects the inversion bit and determines if the bits have been inverted. If the received bits were inverted, the receiving device must invert the received bits before using or storing them.
In computing whether the bits on the bus should be inverted (or not), conventional techniques use digital logic. The digital logic includes several gates and possibly several adder circuits to make the inversion decision. Since the decision process involves multiple gates, unwanted gate delays are introduced into the process. This is undesirable. Accordingly, there is a need and desire to minimize gate delays to reduce latency, layout area and power consumption during the bus inversion decision process.